#include "../header.h"

//1.setitimer的用法：第一次 内核给本进程发送SIGALRM信号。以后每隔特定时间发送信号。
//2.编程SIGALRM信号。每当接收到这个信号，就记录当前系统时间到tim.txt文件中。
static char* tims= NULL;
time_t tm;
//信号注册函数
void sigfun(int signo)
{
    if(signo == SIGALRM)
    {   
        printf("this is SIGALRM\n");
        //打开
        int fd = open("tim.txt",O_CREAT | O_APPEND | O_RDWR ,0666);
        //书写
        time(&tm);
        tims = asctime(localtime(&tm));
        write(fd,tims,strlen(tims));
        //关闭
        close(fd);
    }
}

int main(int argc, char const *argv[])
{
    //信号注册
    signal(SIGALRM,sigfun);

    //定时器函数
    struct itimerval newtm = {0},oldtm = {0};
    //第一次出发时间的设定
    newtm.it_value.tv_sec = 5; //5s以后第一次触发
    //间隔时间的设定
    newtm.it_interval.tv_sec = 1;

    //启动定时器
    if(setitimer(ITIMER_REAL,&newtm,&oldtm))
    {
        perror("setitimer error\n");
        return -1;
    }
    //模拟本程序正在进行。
    int num = 10;
    while (num--)
    {
        printf("this is signal test:%d\n",getpid());
        sleep(1);
    }
    //SIGALRM信号功能恢复。
    signal(SIGALRM,SIG_DFL);
    while (num--)
    {
        printf("this is signal test:%d\n",getpid());
        sleep(1);
    }
     setitimer(ITIMER_REAL,&oldtm,NULL);
    return 0;
}
